package com.xuzhen.tag;

import java.io.IOException;
import java.util.Random;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 在RandomTag类的doStartTag方法中使用了一个pageContext变量来获得JspWriter对象（JSP的out内置对象）。
 * pageContext变量是在TagSupport类中定义的一个类变量，该变量通过TagSupport类中的setPageContext方法进行赋值。
 * 实际上，setPageContext方法是在Tag接口中定义的，而TagSupport实现了Tag接口的setPageContext方法。
 * Servlet容器在调用doStartTag方法之前，会先调用Tag接口的setPageContext方法来初始化pageContext变量。
 * Tag接口将在10.1.3节介绍，在这里只要知道所有的标签类都必须实现Tag接口。为了简化标签类的实现，
 * JSP API提供了一个TagSupport类，有了TagSupport类，用户在编写标签类时就不需要实现Tag接口的所有方法了。
 * @author xuzhen
 *
 */
public class RandomTag extends TagSupport {
	// 封装random标签的两个属性的JavaBean属性
	private int min = 0;
	private int max = Integer.MAX_VALUE;

	// min属性的setter方法
	public void setMin(int min) {
		this.min = min;
	}

	// max属性的setter方法
	public void setMax(int max) {
		this.max = max;
	}

	// 覆盖TagSupport类的doStartTag方法 //
	// 当遇到标签（也就是<ct:random>）的开始标记时调用该方法
	@Override
	public int doStartTag() throws JspException {
		try {
			Random random = new Random(); // 生成一个在min和max之间的随机数
			int result = min + random.nextInt(max - min); // 将生成的随机数输出到客户端
			pageContext.getOut().write(String.valueOf(result));
		} catch (IOException e) {
		} // TagSupport类的doStartTag方法默认返回SKIP_BODY，表示忽略自定义标签体 return
		return super.doStartTag();
	}
}
